import { createSlice } from '@reduxjs/toolkit'
import request from '@/utils/request'
import { delToken, setToken, getToken } from '@/utils/auth'


export const login = createSlice({
  // 命名空间，在调用action的时候会默认的设置为action命令的前缀,避免冲突
  name: 'login',
  // 1. 定义变量(状态数据)
  initialState: {
    token: getToken() || ''
  },
  // 2. 定义reducers更新变量(其中函数属性名作为action，在组件中可以dispatch触发reducer函数更新状态)
  reducers: {
    // action函数(同步)
    setTokenRd (state, action) {
      state.token = action.payload
    },
    delTokenRd (state) {
      state.token = ''
    }
  },
})

// 导出action函数(组件中可以dispatch(action函数)触发reducer更新状态)
export const { setTokenRd, delTokenRd } = login.actions

// 3. 异步action
/**
 * 
 * @param {*} formData {mobile,code}
 */
export function loginAction (formData) {
  return async (dispatch) => {
    // 1. 获取token
    const { data } = await request.post('/authorizations', formData)
    console.log('2登录：', data.token)
    // 2. 存储token到redux，同时本地存储一份
    dispatch(setTokenRd(data.token))
    setToken(data.token)
    // localStorage.setItem('geek-token', data.token)
  }
}

export function logoutAction () {
  return (dispatch) => {
    //  删除token和用户信息
    dispatch(delTokenRd())
    delToken()
  }
}

// 导出reducer(创建store使用)
export default login.reducer